package com.tencent.yumeko;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope
//Spring Cloud Tencent 1.7.0（不包含） 之前的版本通过 Spring Cloud 标准的 @RefreshScope
//实现配置动态刷新。1.7.0 版本（包含）之后，则通过反射的方式实现属性动态刷新。相比于 @RefreshScope 的方式
//反射方式无需重新构建 Bean、Context，影响面更小、性能更佳
//代码里无需加 @RefreshScope 注解，侵入更低
//为了平滑升级，默认的动态刷新方式还是 @RefreshScope，可以通过 spring.cloud.polaris.config.refresh-type=reflect 配置切换成反射更新模式。
public class ConfigController {

    @Value("${timeout:1000}")
    private int timeout;

    @Autowired
    private Person person;

    @Autowired
    private Environment environment;

    //http://localhost:33333/timeout/
    @GetMapping("/timeout")
    public int timeout() {
        environment.getProperty("timeout", "1000");
        return timeout;
    }

    //http://localhost:33333/person
    @GetMapping("/person")
    public String person() {
        return person.toString();
    }

}
